package org.framework.common.api.websocket.handler;

import java.io.IOException;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;

/**
 * Websocket监听器
 * <p>描述: </p>
 * <p>Company: Professional</p>
 * @author chanlong(陈龙)
 * @date 2016年5月16日 下午12:54:36
 * @version 1.0.2016
 */
@Component("synchs")
public class WebsocketEndSynchs implements WebSocketHandler {

	private WebSocketSession session;
	
	/**
	 * 
	 * @see org.springframework.web.socket.handler.AbstractWebSocketHandler#afterConnectionEstablished(org.springframework.web.socket.WebSocketSession)
	 * @author chanlong(陈龙)
	 * @date 2016年5月16日 下午5:35:38
	 */
	@Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
		this.session = session;
    }
	
	/**
	 * 
	 * @see org.springframework.web.socket.handler.AbstractWebSocketHandler#handleTransportError(org.springframework.web.socket.WebSocketSession, java.lang.Throwable)
	 * @author chanlong(陈龙)
	 * @date 2016年5月16日 下午5:35:24
	 */
	@Override
	public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
		if(session != null && session.isOpen()) this.session.close();
	}

	/**
	 * 
	 * @see org.springframework.web.socket.handler.AbstractWebSocketHandler#afterConnectionClosed(org.springframework.web.socket.WebSocketSession, org.springframework.web.socket.CloseStatus)
	 * @author chanlong(陈龙)
	 * @date 2016年5月16日 下午5:35:30
	 */
	@Override
	public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
		if(this.session != null) this.session.close();
	}

	/**
	 * 发送消息通知.
	 * @param message
	 * @throws IOException
	 * @author chanlong(陈龙)
	 * @date 2016年5月16日 下午7:35:58
	 */
	public void sendMessage(final String message) throws IOException{
		TextMessage text = new TextMessage(message);
		session.sendMessage(text);
	}

	@Override
	public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
		
	}

	@Override
	public boolean supportsPartialMessages() {
		return false;
	}
	
}
